package br.ufrgs.engsoft.util;

import br.ufrgs.engsoft.ui.Controller;
import br.ufrgs.engsoft.ui.DefaultController;
import br.ufrgs.engsoft.ui.IncluirReferenciaController;
import br.ufrgs.engsoft.ui.ListarReferenciaController;

/**
 * Classe Enumerator usada para padronizar a identificacao das paginas HTML.
 */
public enum AcaoEnum {
	INDEX("Pagina Inicial", DefaultController.class, "index.html"),											// Pagina inicial
	ERROR("erro", DefaultController.class, "error.html"),													// Pagina padrao de erro
	INCLUIR_REFERENCIA("Incluir Referencia", IncluirReferenciaController.class, "incluir_referencia.html"), // Pagina nova referencia
	INCLUIR("Incluir", IncluirReferenciaController.class, "confirmacao.html"), 								// Inclusao de referencia
	CANCELAR("Cancelar", DefaultController.class, "index.html"), 											// Cancelar inclusao de referencia
	LISTAR_REFERENCIA("Listar Referencia", ListarReferenciaController.class, "listar_referencia.html") 		// Lista de referencias
	;

	private String acaoHtml;
	private Class<? extends Controller> controlador;
	private String fileName;

	private AcaoEnum(String acao, Class<? extends Controller> controlador, String fileName) {
		this.acaoHtml = acao;
		this.controlador = controlador;
		this.fileName = fileName;
	}

	private String getAcaoHtml() {
		return acaoHtml;
	}

	public Controller getControllerFactory() throws InstantiationException,	IllegalAccessException {
		return controlador.newInstance();
	}

	public static AcaoEnum valueOfByAcao(String acao) {
		if (acao == null || acao.isEmpty())
			return INDEX;

		AcaoEnum[] valores = AcaoEnum.values();
		for (AcaoEnum valor : valores)
			if (valor.getAcaoHtml().equals(acao))
				return valor;

		throw new RuntimeException("Acao " + acao
				+ " nao registrada no sistema.");
	}

	public String getFileName() {
		return fileName;
	}
}
